package cn.cmvideo.springboot;

/**
 * 一个接口有默认方法，一个类实现了多个接口，且这些接口有相同的默认方法，解决方式：<br>
 * 1.创建自己的默认方法，来覆盖重写接口的默认方法<br>
 * 2.使用super来调用指定接口的默认方法
 * 
 * @author Administrator
 *
 */
public class Caculator
{
	interface IntegerMath
	{
		int operation(int a, int b);
	}

	interface GreetingService
	{
		void sayMessage(String message);
		// 默认方法，接口中可以有实现
		default String sayMessage2(String firstName,String lastName)
		{
			return firstName + "-" + lastName;
		}
		// 静态方法
		static String sayMessage3(String firstName,String lastName)
		{
			return firstName + "-" + lastName;
		}
	}
	

	public int operateBinary(int a, int b, IntegerMath op)
	{
		return op.operation(a, b);
	}

	public static void main(String[] args)
	{
		Caculator myApp = new Caculator();
		// 接收两个参数，并返回他们的和。参数有类型声明
		IntegerMath addition = (int a, int b) -> a + b;

		IntegerMath addition2 = (int a, int b) -> {
			return a + b;
		};

		// 接收两个参数，并返回他们的差。参数没有类型声明
		IntegerMath subtraction = (a, b) -> a - b;
		
		// 不用括号
		GreetingService greetingService1 = message -> System.out.println("Hello " + message);
		
		// 用括号
		GreetingService greetingService2 = (message) -> System.out.println("Hello " + message);
		// 当 sayMessage 有两个参数时需要用括号
		// 接口 GreetingService 只能有一个抽象函数
		
		String sayMessage3 = GreetingService.sayMessage3("zs", "LLLLL");
		System.out.println(sayMessage3);
		
		System.out.println("addition 40 + 2 = " + myApp.operateBinary(40, 2, addition));
		System.out.println("addition2 40 + 2 = " + myApp.operateBinary(40, 2, addition2));
		System.out.println("20 - 10 = " + myApp.operateBinary(20, 10, subtraction));
		greetingService1.sayMessage("baidu");
		greetingService2.sayMessage("google");
	}

}
